# LangGraph Weather Agent Demo
# 支持多种模型选择：通义千问、DeepSeek API、Ollama本地模型

from dotenv import load_dotenv
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

import os

# 加载.env文件中的环境变量
load_dotenv()

def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"今天{city}的天气：晴朗，温度25°C，湿度60%，微风"

def get_time() -> str:
    """Get current time."""
    from datetime import datetime
    return f"当前时间：{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"

# 工具列表
tools = [get_weather, get_time]

# 根据环境变量选择模型
def create_model():
    """根据可用的API密钥和配置选择合适的模型"""
 
    #选项2：尝试使用DeepSeek API（如果有余额）
    # deepseek_key = os.getenv("DEEPSEEK_API_KEY")
    # if deepseek_key and deepseek_key != "sk-d530d84b775d4f05bc6d9912216bb40f":
    #     try:
    #         from langchain_deepseek import ChatDeepSeek
    #         print("🔥 使用DeepSeek模型")
    #         return ChatDeepSeek(
    #             model="deepseek-chat",
    #             api_key=deepseek_key,
    #             temperature=0.1
    #         )
    #     except Exception as e:
    #         print(f"DeepSeek API不可用: {e}")
    # 选项3：尝试使用Kimi API（兼容OpenAI SDK）

 
    kimi_key = os.getenv("KIMI_API_KEY")
    if kimi_key:
        try:
            print("🌙 使用Kimi模型")
            return ChatOpenAI(
                model="moonshot-v1-8k",  # Kimi的模型名称
                api_key=kimi_key,
                base_url="https://api.moonshot.cn/v1",  # Kimi API的base URL
                temperature=0.1,
                max_retries=2,  # 设置重试次数
                timeout=30  # 设置超时时间
            )
        except ImportError as e:
            print(f"Kimi API不可用 - 缺少依赖: {e}")
        except Exception as e:
            print(f"Kimi API不可用: {e}")



# 创建agent
model = create_model()
agent = create_react_agent(
    model=model,
    tools=tools,
    prompt="你是一个有用的助手，可以查询天气和时间信息。请用中文回答。"
)

# 注释掉直接执行的代码，避免在模块加载时调用API
# Run the agent
# s = agent.invoke(
#     {"messages": [{"role": "user", "content": "南昌今天的天气如何？"}]}
# )
# print(s)